#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <map>
using namespace std;
//int main()
//{
//    int n = 0, m = 0;
//    cin >> n >> m;
//    cerr << n << " " << m << endl;
//    map<int, int> ma;
//    for (int i = 0;i < n;i++)
//    {
//        int tmp = 0;
//        cin >> tmp;
//        ++ma[tmp];
//    }
//    int max = 0;
//    for (auto& a : ma)
//    {
//        //cerr<<a.first<<" : "<<a.second<<endl;
//        if (a.second > max) max = a.second;
//    }
//    int start = 1, last = max, mid = 0;
//    while (start <= last)
//    {
//        cerr << "start=" << start << ",last=" << last << endl;
//        mid = (start + last) / 2;
//        cerr << "mid=" << mid << endl;
//        int count = 0;
//        for (auto& a : ma)
//        {
//            count += a.second / mid;
//            //cerr<<"count="<<count;
//            if (a.second % mid != 0) count++;
//            //cerr<<"count="<<count<<endl;
//        }
//        cerr << "count=" << count << ",m=" << m << endl;
//        if (count < m)
//        {
//            last = mid - 1;
//        }
//        else if (count > m)
//        {
//            start = mid + 1;
//        }
//        else
//        {
//            break;
//        }
//    }
//    if (start >= last)
//    {
//        cerr << "-1" << endl;
//        cout << "-1" << endl;
//        return 0;
//    }
//
//    mid--;
//    while (mid > 0)
//    {
//        cerr << "mid2=" << mid << endl;
//        int count = 0;
//        for (auto& a : ma)
//        {
//            count += a.second / mid;
//            //cerr<<"count="<<count;
//            if (a.second % mid != 0) count++;
//            //cerr<<"count="<<count<<endl;
//        }
//        cerr << "count=" << count << ",m=" << m << endl;
//        if (count != m)
//        {
//            cerr << "break:" << mid << endl;
//            break;
//        }
//        mid--;
//    }
//    mid++;
//    cout << mid << endl;
//    return 0;
//}

int main()
{
    int n = 0, m = 0;
    cin >> n >> m;
    cerr << n << " " << m << endl;
    map<int, int> ma;
    for (int i = 0;i < n;i++)
    {
        int tmp = 0;
        cin >> tmp;
        ++ma[tmp];
    }
    int max = 0;
    for (auto& a : ma)
    {
        //cerr<<a.first<<" : "<<a.second<<endl;
        if (a.second > max) max = a.second;
    }
    if (m < ma.size())
    {
        cout << "-1";
        return 0;
    }
    int start = 1, last = max, mid = 0;
    while (start < last)
    {
        cerr << "start=" << start << ",last=" << last << endl;
        mid = (start + last) / 2;
        cerr << "mid=" << mid << endl;
        int count = 0;
        for (auto& a : ma)
        {
            count += a.second / mid;
            //cerr<<"count="<<count;
            if (a.second % mid != 0) count++;
            //cerr<<"count="<<count<<endl;
        }
        cerr << "count=" << count << ",m=" << m << endl;
        if (count <= m) last = mid;
        else start = mid + 1;
    }
    cout << start << endl;

    return 0;
}